﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MIAP.DataAccess.Interfaces;
using MIAP.Entidades;

namespace MIAP.Negocio
{
    public class ConfiguracionNegocio
    {
        #region Campos

        /// <summary>
        /// Instancia para el acceso a datos de Configuración.
        /// </summary>
        private readonly IConfiguracionDao _daoConfiguracion;

        #endregion

        #region Constructor

        public ConfiguracionNegocio()
        {
            this._daoConfiguracion = DataAccessFactory.Instance.CreateConfiguracionDao();
        }

        #endregion

        #region Metodos

        /// <summary>
        /// Obtiene la configuración para el perfil del administrador.
        /// </summary>
        /// <returns>Información del perfil del administrador.</returns>
        public CatalogoInfo GetConfiguracionPerfilAdministrador()
        {
            return this._daoConfiguracion.GetConfiguracionPerfilAdministrador();
        }

        /// <summary>
        /// Obtiene la ruta en donde se encotraran los paquetes y archivos
        /// </summary>
        /// <returns>un objeto catalogo info con la información contenida en la variable descripcion</returns>
        public CatalogoInfo GetRutaArchivos()
        {
            return this._daoConfiguracion.GetRutaArchivos();
        }

        /// <summary>
        /// Obtiene la ruta en donde se encotraran los paquetes.
        /// </summary>
        /// <returns>Un objeto catalogo info con la información contenida en la variable descripcion</returns>
        public CatalogoInfo GetRutaPaquetes()
        {
            return this._daoConfiguracion.GetRutaPaquetes();
        }

        /// <summary>
        /// Obtiene el nombre del dominio a utilizar para la funcion de impersonate.
        /// </summary>
        /// <returns>un objeto catalogo info con la información contenida en la variable descripcion</returns>
        public CatalogoInfo GetNombreDominioImpersonate()
        {
            return this._daoConfiguracion.GetNombreDominioImpersonate();
        }

        /// <summary>
        /// Obtiene el nombre del usuario a utilizar para la funcion de impersonate.
        /// </summary>
        /// <returns>un objeto catalogo info con la información contenida en la variable descripcion</returns>
        public CatalogoInfo GetNombreUserImpersonate()
        {
            return this._daoConfiguracion.GetNombreUserImpersonate();
        }

        /// <summary>
        /// Obtiene el nombre del password del usuario a utilizar para la funcion de impersonate.
        /// </summary>
        /// <returns>un objeto catalogo info con la información contenida en la variable descripcion</returns>
        public CatalogoInfo GetNombrePasswordImpersonate()
        {
            return this._daoConfiguracion.GetNombrePasswordImpersonate();
        }

        /// <summary>
        /// Obtiene la configuración del numero de registros que se mostraran por pagina en el grid
        /// </summary>
        /// <returns>un objeto catalogo info con la información contenida en la variable descripcion</returns>
        public CatalogoInfo GetNumeroPaginasGrid()
        {
            return this._daoConfiguracion.GetNumeroPaginasGrid();
        }


        /// <summary>
        /// Obtiene el nombre del password del usuario a utilizar para el envio de correo.
        /// </summary>
        /// <returns>un objeto catalogo info con la información contenida en la variable descripcion</returns>
        public CatalogoInfo GetNombrePasswordcorreo()
        {
            return this._daoConfiguracion.GetNombrePasswordcorreo();
        }

        /// <summary>
        /// Obtiene el nombre del usuario a utilizar parael envio de correo.
        /// </summary>
        /// <returns>un objeto catalogo info con la información contenida en la variable descripcion</returns>
        public CatalogoInfo GetNombreUserCorreo()
        {
            return this._daoConfiguracion.GetNombreUserCorreo();
        }

        /// <summary>
        /// Obtiene el nombre del dominio a utilizar para el envio de correo.
        /// </summary>
        /// <returns>un objeto catalogo info con la información contenida en la variable descripcion</returns>
        public CatalogoInfo GetNombreDominioCorreo()
        {
            return this._daoConfiguracion.GetNombreDominioCorreo();
        }

        /// <summary>
        /// Obtiene el correo (from) para utilizar en el envio de correo.
        /// </summary>
        /// <returns>un objeto catalogo info con la información contenida en la variable descripcion</returns>
        public CatalogoInfo GetFromEnvioCorreo()
        {
            return this._daoConfiguracion.GetFromEnvioCorreo();
        }

        /// <summary>
        /// Obtiene la cadena de conexion de la base de datos, es la misma del web.config pero sin los metadatos
        /// </summary>
        /// <returns></returns>
        public string  GetConnectionString()
        {
            return this._daoConfiguracion.GetConnectionString();
        }

        /// <summary>
        /// Obtiene los correos a los cuales se le enviara notificacion si es que ocurre algún error en la aplicación.
        /// </summary>
        /// <returns>un objeto catalogo info con la información contenida en la variable descripcion</returns>
        public CatalogoInfo GetFromCorreosErrores()
        {
            return this._daoConfiguracion.GetFromCorreosErrores();
        }

        /// <summary>
        ///edita las variables de configuración que tendrá un paquete
        /// </summary>
        /// <returns></returns>
        public void EditVariablesPaquete(string nombreAntProy, string nombreProy, string nombreAnteriorArchivo, string nombreArchivo,
                                          string user,
                                          IEnumerable<string> variables)
        {
            this._daoConfiguracion.EditVariablesPaquete(nombreAntProy, nombreProy, nombreAnteriorArchivo, nombreArchivo,
                                                               user, variables);
        }

        /// <summary>
        ///Inserta las variables de configuración que tendrá un paquete
        /// </summary>
        /// <returns></returns>
        public void SetVariablesPaquete(string nombreProy, string nombreArchivo, string user, List<string> variables)
        {
            this._daoConfiguracion.SetVariablesPaquete(nombreProy, nombreArchivo, user, variables);
        }

        /// <summary>
        /// Obtiene la lista de variables que se necesitan para la ejecucion del paquete
        /// </summary>
        /// <param name="nombrePaquete">nombre del paquete a buscar</param>
        /// <returns>lista con las variables que se necesitaran llenar para la ejecucion del paquete</returns>
        public List<string> GetVariablesPaquete(string proyecto, string NomrbeArch)
        {
            return this._daoConfiguracion.GetVariablesPaquete(proyecto, NomrbeArch);
        }

        #endregion
    }
}
